From 493f5d6b1856229196ccc70362e35376bae085a6 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 23 Oct 2017 14:16:31 +0200 Subject: [PATCH] dnd: Add more surface apis The new function, gtk_drag_source_set_icon_surface, is for setting a drag source icon without using GdkPixbuf. --- docs/reference/gtk/gtk4-sections.txt | 1 + gtk/gtkdragsource.c | 26 ++++++++++++++++++++++++++ gtk/gtkdragsource.h | 3 +++ 3 files changed, 30 insertions(+) diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index e88cb0b6dc..186dea70bd 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -5365,6 +5365,7 @@ gtk_drag_set_icon_default gtk_drag_check_threshold gtk_drag_source_set gtk_drag_source_set_icon_pixbuf +gtk_drag_source_set_icon_surface gtk_drag_source_set_icon_name gtk_drag_source_set_icon_gicon gtk_drag_source_unset diff --git a/gtk/gtkdragsource.c b/gtk/gtkdragsource.c index e6bc185797..4c701b4599 100644 --- a/gtk/gtkdragsource.c +++ b/gtk/gtkdragsource.c @@ -373,6 +373,32 @@ gtk_drag_source_set_icon_pixbuf (GtkWidget *widget, site->image_def = gtk_image_definition_new_pixbuf (pixbuf, 1); } +/** + * gtk_drag_source_set_icon_surface: (method) + * @widget: a #GtkWidget + * @surface: the cairo surface for the drag icon + * + * Sets the icon that will be used for drags from a particular widget + * from a cairo surface. GTK+ retains a reference for @surface and will + * release it when it is no longer needed. + * + * Since: 3.94 + */ +void +gtk_drag_source_set_icon_surface (GtkWidget *widget, + cairo_surface_t *surface) +{ + GtkDragSourceSite *site; + + g_return_if_fail (GTK_IS_WIDGET (widget)); + + site = g_object_get_data (G_OBJECT (widget), "gtk-site-data"); + g_return_if_fail (site != NULL); + + g_clear_pointer (&site->image_def, gtk_image_definition_unref); + site->image_def = gtk_image_definition_new_surface (surface); +} + /** * gtk_drag_source_set_icon_name: (method) * @widget: a #GtkWidget diff --git a/gtk/gtkdragsource.h b/gtk/gtkdragsource.h index 2e3e2c39fb..cca2a9784c 100644 --- a/gtk/gtkdragsource.h +++ b/gtk/gtkdragsource.h @@ -62,6 +62,9 @@ void gtk_drag_source_add_uri_targets (GtkWidget *widget); GDK_AVAILABLE_IN_ALL void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget, GdkPixbuf *pixbuf); +GDK_AVAILABLE_IN_3_94 +void gtk_drag_source_set_icon_surface (GtkWidget *widget, + cairo_surface_t *surface); GDK_AVAILABLE_IN_ALL void gtk_drag_source_set_icon_name (GtkWidget *widget, const gchar *icon_name); -- 2.30.2